﻿/**
 * 元数据。
 */
Ext.define('Happy.metadata.Metadata', {
    mixins: {
        'metadata-of-form': 'Happy.metadata.mixin.MetadataOfForm',
        'metadata-of-grid': 'Happy.metadata.mixin.MetadataOfGrid',
        'metadata-of-model': 'Happy.metadata.mixin.MetadataOfModel',
        'metadata-of-store': 'Happy.metadata.mixin.MetadataOfStore'
    },
    requires: ['Happy.metadata.EditorConfigFns'],

    constructor: function () {
        var me = this;

        me.data = Ext.applyIf(me.data || {}, {
            lifeCycle: 'independent',
            isTree: false
        });
    },

    /**
     * 合并元数据。
     * 
     * @private
     */
    merge: function (datas) {
        var me = this;

        Ext.Array.each(datas || [], function (data) {
            Ext.merge(me.data, data);
        });
    },


    /**
     * 返回模型的展示名字。
     * 
     * @return {String}
     */
    getDisplayName: function () {
        var me = this;

        return me.data.displayName || me.data.name;
    },

    /**
     * 生命周期是否独立，如：订单。
     * 
     * @return {Boolean}
     */
    isLifeCycleIndependent: function () {
        var me = this;

        return me.data.lifeCycle === 'independent';
    },

    /**
     * 生命周期是否不独立，如：订单项。
     * 
     * @return {Boolean}
     */
    isLifeCycleDependent: function () {
        var me = this;

        return me.data.lifeCycle === 'dependent';
    },

    /**
     * 是否是树形结构。
     * 
     * @return {Boolean}
     */
    isTree: function () {
        var me = this;

        return me.data.isTree === true;
    },

    /**
     * 返回属性数组。
     * 
     * @return {Array}
     */
    getProperties: function () {
        var me = this;

        return Ext.Object.getValues(me.data.properties);
    }
});